using BoxBinary.AspectCache.Core.ConfigurationMappers;

namespace BoxBinary.AspectCache.Core.CacheManagement
{
    /// <summary>
    /// When implemented, describes the properties necessary for the <see cref="CacheKeyBuilder"/>
    /// to correctly generate a consistent cache key, and for a <see cref="CachePolicySpecification"/> to be selected from the configuration file.
    /// </summary>
    public interface ICacheable
    {
        /// <summary>
        /// A key-value pair array of parameters that uniquely define this instance of the object.
        /// </summary>
        CacheKeyParamsCollection CacheKeyUniqueParams { get; }

        /// <summary>
        /// A string category for the instance, which will be used to lookup the object's footprint in order
        /// to make decisions about how it is cached
        /// </summary>
        string CachePolicy { get; set; }
    }
}